import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store'
import { getLocal } from '@/utils/local.js'
import { auInfo } from '@/api/my.js'

Vue.use(VueRouter)

const routes = [
  // 配置路由  方法路由懒加载
  {
    path: '/login',
    component: () => import('@/views/login/login.vue')
  },
  {
    path: '/home',
    component: () => import('@/views/home/home.vue'),
    redirect: '/home/my',
    children: [
      {
        path: '/home/company',
        meta: {
          needLogin: true,
          needTab: true
        },
        component: () => import('@/views/home/company/company.vue')
      },
      {
        path: '/home/question',
        component: () => import('@/views/home/question/question.vue'),
        meta: {
          needLogin: true,
          needTab: true
        }
      },
      {
        path: '/home/find',
        meta: {
          needTab: true
        },
        component: () => import('@/views/home/find/find.vue')
      },
      {
        path: '/home/my',
        component: () => import('@/views/home/my/my.vue'),
        meta: {
          needLogin: true,
          needTab: true
        }
      },
      {
        path: '/home/myInfo',
        meta: {
          needLogin: true
        },
        component: () => import('@/views/home/my/myInfo.vue')
      }
    ]
  }
]

const router = new VueRouter({
  routes
})

// 使用前置守卫
// to ：要去的路由信息  from ： 从哪里来的路由信息 next() 正常通过 next(path地址)
/*
  判断 如果to 页面不需要登录的话  直接next() 通过
  需要登录：已经登录的话：直接next() 不用处理
  没有登录的话：判断是否有token值  
  有token值得话 ：通过token值 获取用户信息后 next() 
  没有token值，则跳转到登录页面

*/

router.beforeEach((to, from, next) => {
  if (!to.meta.needLogin) {
    next()
  } else {
    // store里面的方法 判断isLogin 为true  则直接通过
    if (store.state.isLogin) {
      next()
    } else {
      if (getLocal('token')) {
        // 如果有token值 调用my.js暴露出来的auInfo方法
        auInfo()
          .then(res => {
            // 保存用户信息到vuex
            store.commit('setUserInfo', res.data.data)
            // 修改登录状态
            store.commit('setIsLogin', true)
            // 通过
            next()
          })
          .catch(() => {})
      } else {
        next('/login?redirect=' + to.fullPath)
      }
    }
  }
})
// 暴露出口
export default router
